home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- Message-Id: <8906201133.AA01854@gizmo.oasis.icl.stc.co.uk>
- From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Subject: v07i062: a remote printer script for System V
- Reply-To: Paul Blackburn <mcvax!oasis.icl.stc.co.uk!mpb@uunet.UU.NET>
-
- Posting-number: Volume 7, Issue 62
- Submitted-by: Paul Blackburn <mcvax!oasis.icl.stc.co.uk!mpb@uunet.UU.NET>
- Archive-name: lp-remote
-
- [I wonder how many times this particular wheel has been re-invented? I've
- done a few of these myself (one each for uucp and WIN/3B); however, it's
- abotu time someone actually *posted* one. ++bsa]
-
- I enclose a remote printer script which I have written and found to be
- very handy for sharing expensive printers.
-
- It has been tested on System V but not BSD.
- [Won't work under BSD: they use a different spooler. ++bsa]
- --
- Cheers, "did Bostic really send the fix or was it his evil twin, Skippy?"
- Paul Blackburn, ICL, Lovelace Road, Bracknell, Berkshire, RG12 4SN, UK
- mpb@oasis.icl.stc.co.uk OR ...!uunet!mcvax!ukc!iclbra!mpb
- ------------------------------------------cut here---------------------------
- #! /bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #! /bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # remotelp
- # This archive created: Fri Jun 16 16:13:24 1989
- export PATH; PATH=/bin:$PATH
- if test ! -d 'remotelp'
- then
- echo shar: creating directory "'remotelp'"
- mkdir 'remotelp'
- fi
- echo shar: entering directory "'remotelp'"
- cd 'remotelp'
- echo shar: extracting "'README'" '(2899 characters)'
- if test -f 'README'
- then
- echo shar: will not over-write existing file "'README'"
- else
- sed 's/^X//' << \SHAR_EOF > 'README'
- XRemote printer script installation notes Sys V mpb 22 Dec 88
- X---------------------------------------------- -------------
- X
- XPre-amble:
- X
- XThis script was written to allow a set of small UNIX machines
- Xto share two expensive laser printers.
- X
- XIt makes use of uux to transfer the file-to-be-printed to the
- Xmachine that has the printer connected.
- X
- XIt is tried and tested on System V (both .2 and .3) but not
- Xon BSD.
- X
- X1. Files required
- X
- X /usr/spool/lp/model/remote
- X /usr/spool/lp/db
- X
- X2. Adding a new remote printer
- X
- X a. Decide on name for new printer (for example, 'laser')
- X b. Make sure you have a working uucp link to the remote machine
- X and that the remote m/c uucp system will allow the 'lp' command
- X to be executed.
- X c. Become superuser
- X d. Shut down the lp scheduler and set up new printer thus:
- X
- X cd /usr/lib
- X ./lpshut
- X ./lpadmin -plaser -mremote -v/dev/null
- X ./accept laser
- X enable laser
- X lpstat -t
- X
- X e. Re-start the lp scheduler: ./lpsched
- X
- X f. Edit the lp database file (/usr/spool/lp/db) to reflect your remote
- X printer configuration.
- X
- X First, make sure there is a line beginning with the name of the printer:
- X
- Xlaser:pluto:CANON::\033;\033[2 K\033[4 L\033\072\c:\033;\033[15;+;+p\c:
- X^^^^^
- X
- X Second, make sure the second field is the name of the machine
- X to which your local machine has a uucp link.
- X
- Xlaser:epcfta:CANON::\033;\033[2 K\033[4 L\033\072\c:\033;\033[15;+;+p\c:
- X ^^^^^^
- X
- X The third field is a comment field, use a name to describe the printer.
- X
- Xlaser:epcfta:CANON lbp8::\033;\033[2 K\033[4 L\033\072\c:\033;\033[15;+;+p\c:
- X ^^^^^^^^^^
- X
- X The fourth field is for the name of the printer on the remote machine.
- X Normally this would be the same the local print model (i.e. laser).
- X If the remote computer has a different name for the printer you wish
- X to access then set the name here (blank means same name).
- X
- X You can see what printers a machine has available by typing: lpstat -t
- X
- Xlaser:epcfta:CANON lbp8::\033;\033[2 K\033[4 L\033\072\c:\033;\033[15;+;+p\c:
- X ^^
- X
- X The fifth and sixth fields are optional. They specify escape sequences
- X for small and landscape printing on the remote printer. You will need
- X to refer to the printer manual to check these sequences are correct
- X for your remote printer.
- X
- X To use these features you would type:
- X
- X lp -dlaser -ol myfile # for landscape
- X
- X lp -dlaser -os myfile # for small printing
- X
- X
- XHave fun,
- X
- XPaul Blackburn | /~~~\ | Mail: mpb@oasis.icl.stc.co.uk
- XICL, Lovelace Road | (\@,@/) | ...!uunet!mcvax!ukc!iclbra!mpb
- XBracknell, Berkshire | \_=_/ .zZz | Phone: +44 344 424842 x2648
- XRG12 4SN, UK | / " \ | Telex: 22971 STCICL G
- X |'fly-by-wire' :-)| Fax: +44 344 487832
- SHAR_EOF
- fi # end of overwriting check
- echo shar: extracting "'db'" '(1273 characters)'
- if test -f 'db'
- then
- echo shar: will not over-write existing file "'db'"
- else
- sed 's/^X//' << \SHAR_EOF > 'db'
- X# NAME /usr/spool/lp/db
- X# DATE Thu Jul 14 13:32:12 BST 1988
- X# AUTHOR Paul Blackburn, DRSBC, ICL, Bracknell
- X# PURPOSE Database of 'remote' printers.
- X# This file is grep'ed by remote printer scripts to get
- X# details for a printer: The format is:
- X#
- X# <printer>:<next>:<description>:<remote>:<small>:<landscape>
- X#
- X# Where:
- X# M <printer> = name of printer used in 'lp -d<printer>'.
- X# This field is mandatory.
- X#
- X# M <next> = name of next machine to uux to.
- X# This field is mandatory.
- X#
- X# O <description> = description of printer
- X# This field is optional.
- X#
- X# O <remote> = name of printer of remote machine (usually
- X# same as <printer>, defaults to same)
- X# This field is optional.
- X#
- X# O <small> = printer command to switch to small print
- X# This field is optional.
- X#
- X# O <landscape> = printer command to switch to L/S print
- X# This field is optional.
- X#
- X# The commands for small and landscape are escape sequences and are
- X# 'echo'ed to the printer.
- X#
- X# NB as ':' is used to delimit fields use '\072' in command sequences
- X#laser:pluto:RICOH:lzr:"\033\022D3 \c:\033\022D4 \c:
- X
- Xlbp8:pluto:CANON::\033;\033[2 K\033[4 L\033\072\c:\033;\033[15;+;+p\c:
- Xlaser:gator:RICOH:pookie:"\033\022D3 \c:\033\022D4 \c:
- Xdevps:pebbles:PostScript::::
- Xml193p:tigger:::::
- SHAR_EOF
- fi # end of overwriting check
- echo shar: extracting "'remote'" '(2982 characters)'
- if test -f 'remote'
- then
- echo shar: will not over-write existing file "'remote'"
- else
- sed 's/^X//' << \SHAR_EOF > 'remote'
- X# NAME /usr/spool/lp/model/remote
- X# DATE Thu Jul 14 13:31:26 BST 1988
- X# AUTHOR Paul Blackburn, DRSBC, ICL, Bracknell
- X# PURPOSE This is a 'remote' spooler script for any printer.
- X# This works by sending a 'uux' print request to a neighboring
- X# machine (NEXT).
- X#
- X# This is a 'data-driven' script...
- X# /usr/spool/lp/db is used to get data for a particular printer.
- X#
- X# (local) Options:
- X#
- X# -os = small print (portrait)
- X# -ol = small print (landscape)
- X
- XLOG=/usr/spool/lp/log
- XDB=/usr/spool/lp/db
- XMODEL=`basename $0`
- XTEMP=/usr/tmp/${MODEL}.$$
- X
- Xif [ ! -f ${DB} ]
- Xthen
- X echo "${MODEL}: unable to open ${DB}" >>$LOG
- X echo "${MODEL}: aborted" >>$LOG
- X exit 1
- Xfi
- X
- Xgrep "^${MODEL}:" ${DB} >${TEMP}
- X
- XDATA=`cat ${TEMP}`
- X
- Xif [ -z "${DATA}" ]
- Xthen
- X echo "${MODEL}: unable to get data from ${DB}" >>$LOG
- X echo "${MODEL}: aborted" >>$LOG
- X rm -f ${TEMP}
- X exit 1
- Xfi
- X
- XNEXT=`cut -f2 -d":" <${TEMP}`
- XDESC=`cut -f3 -d":" <${TEMP}`
- XRMODEL=`cut -f4 -d":" <${TEMP}`
- Xif [ -z "${RMODEL}" ]
- Xthen
- X RMODEL=${MODEL}
- Xfi
- XSMALL=`cut -f5 -d":" <${TEMP}`
- XLAND=`cut -f6 -d":" <${TEMP}`
- Xrm -f ${TEMP}
- X
- Xecho "${MODEL}: DESC=${DESC}, NEXT=${NEXT}" >>$LOG
- X
- Xif [ -z "${NEXT}" ]
- Xthen
- X echo "${MODEL}: unable to determine next machine" >>$LOG
- X echo "${MODEL}: aborted" >>$LOG
- X exit 1
- Xfi
- X
- XTITLE=
- XOPTIONS=
- XCOPIES=
- X
- Xif [ -n "$3" ]
- Xthen
- X TITLE="-t\"$3\""
- Xelse
- X user=`grep "^$2:" /etc/passwd | line | cut -d: -f5`
- X if [ -z "$user" ]
- X then
- X user=$2
- X fi
- X TITLE="-t\"${user}\""
- Xfi
- X
- Xif [ -n "$4" ]
- Xthen
- X COPIES=-n$4
- Xfi
- Xparam5=$5
- X
- Xshift;shift;shift;shift;shift
- Xfiles="$*"
- X
- X# Split out local options from options for remote lp...
- X
- XLOCALOPT=""
- Xfor i in ${param5}
- Xdo
- X echo "${MODEL}: option=${i}" >>${LOG}
- X case "${i}" in
- X s|l ) # local options
- X LOCALOPT="${LOCALOPT} ${i}"
- X ;;
- X * ) # other options simply passed to remote lp
- X OPTIONS="${OPTIONS} -o${i}"
- X ;;
- X esac
- Xdone
- X
- XOPTIONS="${OPTIONS} -oh"
- Xif [ -z "${LOCALOPT}" ]
- Xthen
- X cat ${files}|uux - -n ${NEXT}!lp ${COPIES} ${OPTIONS} -d${RMODEL}
- Xelse
- X LOCALOPT=`echo ${LOCALOPT}`
- X for i in "${LOCALOPT}"
- X do
- X echo "${MODEL}: local option=${i}" >>${LOG}
- X case "${i}" in
- X s ) # small print (portrait)
- X if [ -z "${SMALL}" ]
- X then
- X echo "${MODEL}: no small cmd\c" >>${LOG}
- X echo " found in ${DB}" >>${LOG}
- X else
- X# echo "${MODEL}: small cmd:" >>${LOG}
- X# echo "${SMALL}" | od -cx >>$LOG
- X echo "${SMALL}"
- X fi
- X ;;
- X l ) # small print (landscape)
- X if [ -z "${LAND}" ]
- X then
- X echo "${MODEL}: no land cmd\c" >>${LOG}
- X echo " found in ${DB}" >>${LOG}
- X else
- X# echo "${MODEL}: land cmd:" >>${LOG}
- X# echo "${LAND}" | od -cx >>$LOG
- X echo "${LAND}"
- X fi
- X ;;
- X * ) # unknown!
- X echo "${MODEL}: unknown local option" >>${LOG}
- X ;;
- X esac
- X done|cat - ${files}|uux - -n ${NEXT}!lp ${COPIES} ${OPTIONS} -d${RMODEL}
- Xfi
- X
- Xecho "${MODEL}: COPIES=${COPIES}, OPTIONS=${OPTIONS}, TITLE=${TITLE}" >> ${LOG}
- Xecho "${MODEL}: warning - ignoring title" >> ${LOG}
- Xecho "${MODEL}: completed on `date` for ${NEXT}" >> ${LOG}
- Xexit 0
- SHAR_EOF
- chmod +x 'remote'
- fi # end of overwriting check
- echo shar: done with directory "'remotelp'"
- cd ..
- # End of shell archive
- exit 0
-
-
-